Fixed GtkMenuItem to reserve the actual arrow size and spacing
authorTristan Van Berkom <tristan.van.berkom@gmail.com>
Fri, 19 Nov 2010 04:29:20 +0000 (13:29 +0900)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Tue, 4 Jan 2011 14:37:06 +0000 (23:37 +0900)
GtkMenuItem was reserving arrow size based on it's requested height,
now base the submenu arrow size on the actual arrow size and spacing.

gtk/gtkmenuitem.c

index 4f04f6c382c136fb800508989e15ff5e46efb390..8c08a63e4a36bf6e91219282780005785c3bb5a5 100644 (file)
@@ -1355,7 +1355,6 @@ gtk_menu_item_size_allocate (GtkWidget     *widget,
   if (child)
     {
       GtkMenuItemPrivate *priv = GET_PRIVATE (menu_item);
-      GtkRequisition child_requisition;
       GtkStyle *style;
       guint horizontal_padding;
       guint border_width;
@@ -1396,12 +1395,20 @@ gtk_menu_item_size_allocate (GtkWidget     *widget,
       child_allocation.x += allocation->x;
       child_allocation.y += allocation->y;
 
-      gtk_widget_get_preferred_size (child, &child_requisition, NULL);
       if ((menu_item->submenu && !GTK_IS_MENU_BAR (parent)) || priv->reserve_indicator)
        {
+         guint arrow_spacing;
+         gint  arrow_size;
+
+         gtk_widget_style_get (widget,
+                               "arrow-spacing", &arrow_spacing,
+                               NULL);
+
+         get_arrow_size (widget, child, &arrow_size);
+
          if (direction == GTK_TEXT_DIR_RTL)
-           child_allocation.x += child_requisition.height;
-         child_allocation.width -= child_requisition.height;
+           child_allocation.x += arrow_size + arrow_spacing;
+         child_allocation.width -= arrow_size + arrow_spacing;
        }
       
       if (child_allocation.width < 1)